﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Happy.ExtentionMethods;
using Happy.Event.Internal;
using Happy.Event.Offline;

namespace Happy.Event
{
    /// <summary>
    /// 获取或访问<see cref="IEventPublisher"/>实例的唯一入口。
    /// </summary>
    public static class EventPublisher
    {
        private static readonly DefaultEventPublisher _DefaultEventPublisher
            = new DefaultEventPublisher();

        private static EventPublisherProvider currentProvider = DefaultEventPublisher;

        /// <summary>
        /// 获取当前应用程序正在使用的事件发布者。
        /// </summary>
        public static IEventPublisher Current
        {
            get { return currentProvider(); }
        }

        /// <summary>
        /// 设置当前应用程序正在使用的事件发布者提供者。
        /// </summary>
        public static void SetProvider(EventPublisherProvider provider)
        {
            provider.MustNotNull("provider");

            currentProvider = provider;
        }

        /// <summary>
        /// 创建一个默认的事件发布者实例，每次调用都会返回不同的实例。
        /// </summary>
        public static IEventPublisher CreateDefaultEventPublisher()
        {
            return new DefaultEventPublisher();
        }

        /// <summary>
        /// 返回内置的默认的事件发布者实例，每次调用都会返回同一个实例。
        /// </summary>
        public static IEventPublisher DefaultEventPublisher()
        {
            return _DefaultEventPublisher;
        }
    }
}
